package com.cms.server.resolver.plugins.scsq;

import java.sql.ResultSet;
import java.util.Date;

import com.efounder.builder.base.data.DataSetUtils;
import com.efounder.builder.base.data.EFDataSet;
import com.efounder.builder.base.data.EFRowSet;
import com.efounder.eai.data.JParamObject;
import com.efounder.form.EFFormDataModel;
import com.efounder.form.io.FormDataResolverAdapter;
import com.efounder.form.server.resolver.util.SYS_MDL_VAL;
import com.efounder.sql.JStatement;
import com.metadata.bizmodel.SYS_MODEL;
import com.persistence.FLOW_TASK_LIST;

public class CMSSubmitToFlowEnd extends FormDataResolverAdapter {

	//初始化FormDataModel
	public void finishSaveForm(JStatement stmt, EFFormDataModel model, JParamObject PO) throws Exception {
		EFDataSet                    billDataSet = model.getBillDataSet();
		EFRowSet                      nodeRowset = EFRowSet.getInstance();
		String                            strSql = "";
		ResultSet                             rs = null;
		String                            F_KJQJ = billDataSet.getRowSet(0).getString(PO.GetValueByParamName(SYS_MODEL._BLFL_KJQJ_COL_, SYS_MDL_VAL.BILL_KJQJ), "");
		String                            F_GUID = billDataSet.getRowSet(0).getString(PO.GetValueByParamName(SYS_MODEL._BILL_GUID_COL_, SYS_MDL_VAL.BILL_GUID), "");
		String                            F_DJBH = billDataSet.getRowSet(0).getString(PO.GetValueByParamName(SYS_MODEL._BILL_BH_COL_, SYS_MDL_VAL.BILL_BH), null);
		String                           FLOW_ID = PO.GetValueByParamName(FLOW_TASK_LIST._FLOW_ID, "");
		String                             OP_ID = PO.GetValueByParamName(FLOW_TASK_LIST._OP_ID, "");
		String                           NODE_ID = PO.GetValueByParamName(FLOW_TASK_LIST._OP_NODE, "");
		String                       RESR_IN_CAUSE = PO.GetValueByParamName(FLOW_TASK_LIST._RESR_IN_CAUSE, "");

		strSql = "select * from FLOW_NODE_LIST where FLOW_ID ='" + FLOW_ID + "' and NODE_ID = '" + NODE_ID + "'";
		rs = stmt.executeQuery(strSql);
		if(rs != null && rs.next()) nodeRowset = (EFRowSet) DataSetUtils.resultSet2RowSet(rs, nodeRowset);
		
		if(nodeRowset.getString("NODE_TYPE", "").equals("end") && RESR_IN_CAUSE.equals("submit")) {
			//更新任务节点的状态为结束
			strSql = "update FLOW_TASK_LIST set TASK_STATUS = 'ending', RESR_STATUS = 'ended' "
				   + " where OP_ID = '" + OP_ID + "' and FLOW_ID = '" + FLOW_ID + "'";
			stmt.execute(strSql);
			
			//任务信息更新到结束流程信息里
			strSql = "insert into FLOW_TASK_END_LIST (OP_ID,FLOW_ID,BIZ_DJBH,BIZ_DATE,BIZ_GUID,OP_USER,OP_USER_NAME,OP_TIME," 
				   + "OP_BMBH,OP_NOTE,TASK_STATUS,OP_NODE,NODE_SRC,NODE_SRC_NAME,NODE_TAG,NODE_TAG_NAME,POP_ID,RESR_STATUS,RESR_IN_CAUSE," 
				   + "RESR_OUT_CAUSE,";
			for(int j = 1; j <= 20; j++) {
				if(j < 10) {
					if(PO.GetValueByParamName(FLOW_TASK_LIST._F_CHAR + "0" + j, null) != null) {
						strSql += "F_CHAR0" + j + ",";
					}
					if(PO.GetValueByParamName(FLOW_TASK_LIST._F_DATE + "0" + j, null) != null) {
						strSql += "F_DATE0" + j + ",";
					}
					if(PO.GetValueByParamName(FLOW_TASK_LIST._F_NUM + "0" + j, null) != null) {
						strSql += "F_NUM0" + j + ",";
					}
				} else {
					if(PO.GetValueByParamName(FLOW_TASK_LIST._F_CHAR + j, null) != null) {
						strSql += "F_CHAR" + j + ",";
					}
					if(PO.GetValueByParamName(FLOW_TASK_LIST._F_DATE + j, null) != null) {
						strSql += "F_DATE" + j + ",";
					}
					if(PO.GetValueByParamName(FLOW_TASK_LIST._F_NUM + j, null) != null) {
						strSql += "F_NUM" + j + ",";
					}
				}
			}
			strSql += "TASK_TO_UNIT,TASK_TO_UNIT_NAME,TASK_TO_USER,TASK_TO_USER_NAME) select "
				    + "OP_ID,FLOW_ID,BIZ_DJBH,BIZ_DATE,BIZ_GUID,OP_USER,OP_USER_NAME,OP_TIME,"
				    + "OP_BMBH,OP_NOTE,TASK_STATUS,OP_NODE,NODE_SRC,NODE_SRC_NAME,NODE_TAG,NODE_TAG_NAME,POP_ID,RESR_STATUS,RESR_IN_CAUSE," 
				    + "RESR_OUT_CAUSE,";
			for(int j = 1; j <= 20; j++) {
		 		if(j < 10) {
		 			if(PO.GetValueByParamName(FLOW_TASK_LIST._F_CHAR + "0" + j, null) != null) {
		 				strSql += "'" + PO.GetValueByParamName(FLOW_TASK_LIST._F_CHAR + "0" + j, null)  + "',";
		 			} 
		 			if(PO.GetValueByParamName(FLOW_TASK_LIST._F_DATE + "0" + j, null) != null) {
		 				strSql += "'" + PO.GetValueByParamName(FLOW_TASK_LIST._F_DATE + "0" + j, null)  + "',";
		 			}
		 			if(PO.GetValueByParamName(FLOW_TASK_LIST._F_NUM + "0" + j, null) != null) {
		 				strSql += "'" + PO.GetValueByParamName(FLOW_TASK_LIST._F_NUM + "0" + j, null)  + "',";
		 			}
		 		} else {
		 			if(PO.GetValueByParamName(FLOW_TASK_LIST._F_CHAR + j, null) != null) {
		 				strSql += "'" + PO.GetValueByParamName(FLOW_TASK_LIST._F_CHAR + j, null)  + "',";
		 			} 
		 			if(PO.GetValueByParamName(FLOW_TASK_LIST._F_DATE + j, null) != null) {
		 				strSql += "'" + PO.GetValueByParamName(FLOW_TASK_LIST._F_DATE + j, null)  + "',";
		 			}
		 			if(PO.GetValueByParamName(FLOW_TASK_LIST._F_NUM + j, null) != null) {
		 				strSql += "'" + PO.GetValueByParamName(FLOW_TASK_LIST._F_NUM + j, null)  + "',";
		 			}
		 		}
		 	}
			strSql += "TASK_TO_UNIT,TASK_TO_UNIT_NAME,TASK_TO_USER,TASK_TO_USER_NAME from FLOW_TASK_LIST where BIZ_DJBH = '" + F_DJBH + "' and BIZ_DATE = '"
			        + F_KJQJ + "' and BIZ_GUID = '" + F_GUID + "' and FLOW_ID = '" + FLOW_ID + "'";
			stmt.execute(strSql);
			
			strSql = "delete from FLOW_TASK_LIST  where BIZ_DJBH = '" + F_DJBH + "' and BIZ_DATE = '"
			       + F_KJQJ + "' and BIZ_GUID = '" + F_GUID + "' and FLOW_ID = '" + FLOW_ID + "'";
			stmt.execute(strSql);
		}
	}
}
